#pragma once

#include <glm\glm.hpp>

#include "Camara.h"
#include "CamGrua.h"
#include "CamPrimeraPersona.h"


class ControlCamaras {
public:
	// Las dimensiones del "viewport"
	ControlCamaras(int ancho, int alto);

	// Inicializa la camara
	void init(const glm::vec3 &camUnoPosicion, const glm::vec3 &camUnoTarget, const glm::vec3 &camUnoUp,
		const glm::vec3 &camDosPosicion, const glm::vec3 &camDosTarget, const glm::vec3 &camDosUp);

	// Cambia el tipo de camara usada
	void cambiarCamara(TIPO_CAMARA tc);

	void zoomIn(ZOOM_TYPE z);
	void mouseMove(int viewportPosX, int viewportPosY);
	void moverCamara(MOVE_TYPE direccion, float magnitud);
	void moverCamaraGrua(MOVE_TYPE direccion, float magnitud);

	const glm::mat4 getViewMatrix() const;
	const glm::mat4 getProjectMatrix() const;

private:
	// Los tipos de camara
	Camara* m_camaraActual;
	CamGrua m_camara_cabina_grua;
	CamPrimeraPersona m_camara_primera_persona;
};

